This invention relates generally to content item synchronization, and particularly to synchronization of a document by synchronizing blocks of a content item.
Content management systems enable users to share content items from one client to another client. The clients are computing devices that provide content items to the content management system for storage and synchronization with other clients. The other client may be operated by another user or may be a device registered or managed by the same user. When new content items are added to local storage at a client, the client provides the document with the content management system. When a client uploads a new content item to the content management system, the content management system receives the content item from the uploading user and associates the content item with a namespace. The namespace is associated with other clients and users that are synchronized with content items associated with the namespace. The clients and users associated with the namespace maintain a local storage of the documents associated with the namespace. Only after the entire content item is received by the content management system, is the content item synchronized with other clients. Consequently, it is only after the entire content item is committed to the namespace does the content management system notify other clients associated with the namespace that a new content item is available. This is the case with both a new content item added to the client that did not previously exist in the namespace, and with modified versions of an existing content item. The content management system notifies clients to synchronize the content item with the local storage at the client. Accordingly, because the content management system waits for the entire content item to be committed prior to notifying clients, for larger content items there can be a significant delay between completing the commit to the content management system and the content item being available at another client.